import type { PageQuery } from '../types'

// 定义获取素材列表接口的参数类型
export interface ListMaterialParams extends PageQuery {
  /** 素材 类型 */
  type?: string;
  /** 素材组 ID */
  groupId?: string;
  /** 素材名称 */
  name?: string;
  /** 使用类型 1业务 2养号 99不限 */
  useTypes?: number[];
}

// 定义批量创建素材接口的参数类型
export interface BatchCreateMaterialByFileParams {
  /** 素材组 ID */
  groupId: string;
  /** 素材文件 key */
  fileKey: string;
}

// 定义批量删除素材接口的参数类型
export interface BatchDeleteMaterialParams {
  /** 素材 ID 列表 */
  ids: string[];
}

// 定义创建素材接口的参数类型
export interface CreateMaterialParams {
  /** 素材名称 */
  name: string;
  /** 素材类型 */
  type: string;
  /** 素材组 ID */
  groupId: string;
  /** 素材内容 */
  content: string;
  /** 备注 */
  remark?: string;
  /** 使用类型 1业务 2养号 99不限 */
  useType: number;
}

// 定义创建素材组接口的参数类型
export interface CreateMaterialGroupParams {
  /** 素材组名称 */
  name: string;
  /** 素材组类型 */
  type: string;
  /** 是否为公共素材组 */
  isPublic: boolean;
  /** 使用类型 1业务 2养号 99不限 */
  useType: number;
  /** 备注（可选） */
  remark?: string;
}

// 定义修改素材
export interface UpdateMaterialParams {
  /** 素材 ID */
  id: string;
  /** 素材内容 */
  content?: string;
  /** 备注 */
  remark?: string;
}

// 定义删除素材组接口的参数类型
export interface DeleteMaterialGroupParams {
  /** 素材组 ID */
  id: string;
}

// 定义获取素材组列表接口的参数类型
export interface ListMaterialGroupParams extends PageQuery {
  /** 素材组 ID */
  id?: string;
  /** 素材组类型 */
  type?: string;
  /** 是否为公共素材组 */
  isPublic?: boolean;
  /** 素材组名称 */
  name?: string;
  /** 使用类型 1业务 2养号 99不限 */
  useTypes: number[];
}

// 定义更新素材组接口的参数类型
export interface UpdateMaterialGroupParams {
  /** 素材组 ID */
  id: string;
  /** 素材组名称 */
  name: string;
  /** 是否为公共素材组 */
  isPublic: boolean;
  /** 备注（可选） */
  remark?: string;
}

// 素材API接口定义
export interface MaterialAPI {
  listMaterial(data: ListMaterialParams): Promise<any>;
  batchCreateMaterialByFile(data: BatchCreateMaterialByFileParams): Promise<any>;
  batchDeleteMaterial(data: BatchDeleteMaterialParams): Promise<any>;
  createMaterial(data: CreateMaterialParams): Promise<any>;
  createMaterialGroup(data: CreateMaterialGroupParams): Promise<any>;
  deleteMaterialGroup(data: DeleteMaterialGroupParams): Promise<any>;
  listMaterialGroup(data: ListMaterialGroupParams): Promise<any>;
  updateMaterialGroup(data: UpdateMaterialGroupParams): Promise<any>;
  updateMaterial(data: UpdateMaterialParams): Promise<any>;
}

// 默认的API实现（可以被外部覆盖）
export const createMaterialAPI = (request: any): MaterialAPI => {
  const MAIN_BASE_URL = "/v1";

  return {
    /**
     * 更新素材
     * @param {UpdateMaterialParams} data - 请求参数
     * @returns 返回更新素材操作的结果
     */
    updateMaterial(data: UpdateMaterialParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/update-material`,
        method: "post",
        data,
      });
    },

    /**
     * 获取素材列表
     * @param {ListMaterialParams} data - 请求参数
     * @returns 返回获取素材列表操作的结果
     */
    listMaterial(data: ListMaterialParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/list-material`,
        method: "post",
        data,
      });
    },

    /**
     * 批量创建素材
     * @param {BatchCreateMaterialByFileParams} data - 请求参数
     * @returns 返回批量创建素材操作的结果
     */
    batchCreateMaterialByFile(data: BatchCreateMaterialByFileParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/batch-create-material-by-file`,
        method: "post",
        data,
      });
    },

    /**
     * 批量删除素材
     * @param {BatchDeleteMaterialParams} data - 请求参数
     * @returns 返回批量删除素材操作的结果
     */
    batchDeleteMaterial(data: BatchDeleteMaterialParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/batch-delete-material`,
        method: "post",
        data,
      });
    },

    /**
     * 创建素材
     * @param {CreateMaterialParams} data - 请求参数
     * @returns 返回创建素材操作的结果
     */
    createMaterial(data: CreateMaterialParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/create-material`,
        method: "post",
        data,
      });
    },

    /**
     * 创建素材组
     * @param {CreateMaterialGroupParams} data - 请求参数
     * @returns 返回创建素材组操作的结果
     */
    createMaterialGroup(data: CreateMaterialGroupParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/create-material-group`,
        method: "post",
        data,
      });
    },

    /**
     * 删除素材组
     * @param {DeleteMaterialGroupParams} data - 请求参数
     * @returns 返回删除素材组操作的结果
     */
    deleteMaterialGroup(data: DeleteMaterialGroupParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/delete-material-group`,
        method: "post",
        data,
      });
    },

    /**
     * 获取素材组列表
     * @param {ListMaterialGroupParams} data - 请求参数
     * @returns 返回获取素材组列表操作的结果
     */
    listMaterialGroup(data: ListMaterialGroupParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/list-material-group`,
        method: "post",
        data,
      });
    },

    /**
     * 更新素材组
     * @param {UpdateMaterialGroupParams} data - 请求参数
     * @returns 返回更新素材组操作的结果
     */
    updateMaterialGroup(data: UpdateMaterialGroupParams) {
      return request({
        url: `${MAIN_BASE_URL}/material/update-material-group`,
        method: "post",
        data,
      });
    },
  };
};